package reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

/**
 * 操作私有方法
 */
public class ReflectDemo6 {
    public static void main(String[] args) throws Exception {
        Person p = new Person();
//        p.dosome();//不能在类的外部调用私有方法
        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();//new Person()
//        Method method = cls.getMethod("dosome");
        /*
            Class提供的方法:
            Method getDeclaredMethod(String methodName,Class... args)
            获取Class表示的类自身定义的一个方法(不含从超类继承的，含本类重写的方法)

            Method[] getDeclaredMethods()
            获取Class表示的类自身定义的所有方法(不含从超类继承的，含本类重写的方法)
         */
        Method method = cls.getDeclaredMethod("dosome");
        /*
            Method提供的方法
            int getModifiers()
            可以获取当前方法的访问修饰符
            返回的int值不需要记住具体数字，可以从Modifier类的常量进行对应即可
         */
        if(method.getModifiers() == Modifier.PRIVATE) {//判断该方法是否为private方法
            method.setAccessible(true);//强制打开访问!
        }
        method.invoke(obj);//p.dosome()
    }
}
